package com.menu.Mapper;

import com.menu.Pojo.User;
import com.sun.javafx.collections.MappingChange;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.sql.Date;
import java.util.List;
import java.util.Map;

public interface UserMapper {

    /**
     * 添加用户
     * @param user
     */
    Integer addUser(User user);

    /**
     *查找用户
     * @param account
     * @return
     */
    User selectByAccountOrEmail(@Param("account") String account,@Param("email") String email);

    /**
     * 更新密码
     * @param email
     * @param newPassword
     * @return
     */
    Integer updatePassword(@Param("email") String email, @Param("newPassword") String newPassword);

    /**
     * 通过id查找
     * @param userId
     * @return
     */
    User findByUserId(Integer userId);

    /**
     * 更改头像
     * @param id
     * @param headImg
     * @return
     */
    Integer modifyHeadImg(Integer id, String headImg);

    /**
     * 分页查询
     * @return
     */
    List<User> selectUserByPage();

    /**
     * 模糊搜索
     * @param userInformation
     * @return
     */
    List<User> visualSearch(String userInformation);

    /**
     * 删除
     * @param userId
     * @return
     */
    Integer deleteById(Integer userId);

    /**
     * 模糊查询用户
     * @param key
     * @return
     */
    List<User> findUserByNameLike(String key);


    /**
     * 计算男
     * @return
     */
    Map<String, Object> rateSex();

    /**
     * 计算年龄分布
     *
     * @return
     */
    List<Integer> rateAge();

    /**
     * 查询基本信息
     * @param userId
     * @return
     */
    User selectDetails(Integer userId);

    /**
     * 修改邮箱
     * @param userId
     * @param email
     * @return
     */
    Integer updateEmail(@Param("userId") Integer userId,@Param("email") String email);

    /**
     * 修改密码
     * @param userId
     * @param encode
     * @return
     */
    Integer modifyPassword(@Param("userId") Integer userId,@Param("newPassword") String encode);

    /**
     * 修改用户基本信息
     * @param user
     * @return
     */
    Integer modifyUser(User user);

    /**
     * 修改用户状态
     * @param state
     * @return
     */
    Integer modifyUserState(@Param("state") Integer state,@Param("userId") Integer userId);
}
